Estoy ejecutando MongoDB Atlas en Node Express y recibí este error cuando probé con Postman.
const express = require('express'); const cors = require('cors'); const mongoose = require('mongoose'); require('dotenv').config(); const app = express(); const port = process.env.PORT || 5000; app.use(cors()); app.use(express.json()); const uri = process.env.ATLAS_URI; mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true } ); const connection = mongoose.connection; connection.once('open', () => { console.log("MongoDB database connection established successfully"); }) const exercisesRouter = require('./routes/exercises'); const usersRouter = require('./routes/users'); app.use('/exercises', exercisesRouter); app.use('/users', usersRouter); app.listen(port, () => { console.log(`Server is running on port: ${port}`); }); Este es mi .env , supongo que el problema también podría estar aquí. Por favor, ayuda:
ATLAS_URI=mongodb+srv://userone:useronepassword1234@cluster0.swye5.mongodb.net/<dbname>?retryWrites=true&w=majorityPrimero reemplace <dbname> con su nombre de base de datos real, si no se creó, cree uno.
Luego cree una colección según sea necesario en la propia interfaz de usuario de Atlas.
En Acceso a la red, haga clic en AGREGAR DIRECCIÓN IP y seleccione " permitir acceso desde cualquier lugar ".
Reescribe tu código de esta manera:
mongoose .connect(process.env.MONGO_PROD_URI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }) .then(() => console.log("Database connected!")) .catch(err => console.log(err));Si aún no se resuelve, consulta este enlace .
Estaba enfrentando el mismo problema. Está resuelto. Creo que es posible que no haya permitido el acceso a la red a todos en Atlas: MongoDB. Hazlo resolverá el problema.
En mi caso, tuve que ir a Atlas y restablecer mi IP en la lista blanca a la dirección correcta.
Luego reinicié mi servidor local e intenté publicar de nuevo en cartero... ¡Y funcionó!
Si está viendo esto usando Typescript, asegúrese de estar importando la función de conexión de mongoose y utilícela para conectarse.
import { connect } from "mongoose"; connect(...).then()Verifique su lista de IP de acceso a la red en MongoDB Cloud. Solo podrá conectarse a su clúster desde la lista de direcciones IP
Asegúrese de que la configuración de su dirección IP esté activa
Compruebe si no olvidó establecer la contraseña en la cadena de conexión.
Es un poco tarde, pero probablemente debido a esta línea useCreateIndex: true no está funcionando. Parece que en mongoDB versión 5. esto ya no es compatible. Reescribe como la respuesta de manoj_mi5
mongoose .connect(process.env.MONGODB_URL, { useNewUrlParser: true, useUnifiedTopology: true}) .then(() => console.log("Database connected!")) .catch(err => console.log(err));para comprobar si hay más errores.
Cambie su contraseña de usuario de la base de datos de MongoDB. Debe ser alfanumérico sin caracteres especiales. Nada funcionó para mí, pero cambiar la contraseña sí.
Vaya a su cuenta de Atlas y abra su proyecto.
En el menú de la izquierda, vaya a la sección Network Access :
Agregue su dirección IP para que solo usted pueda conectarse a su clúster. También puede agregar 0.0.0.0/0 y permitirá el acceso desde cualquier lugar.
También me enfrenté al mismo error. En mi caso, el error apareció porque useFindAndModify se configuró como false en la conexión de mongoose
Codigo con error
mongoose.connect(dbUrl, { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false }, () => { console.log('connected to database myDb ;)') })Código de trabajo
mongoose.connect(dbUrl, { useNewUrlParser: true, useUnifiedTopology: true }, () => { console.log('connected to database myDb ;)') })"error: MongooseError: Operation users.insertOne() se agotó el tiempo de espera del almacenamiento en búfer después de 10000 ms"
mongoose.connect(process.env.MONGO_URL, { useNewURLParser: true, useUnifiedTopology: true, useCreateIndex: true, },6000000) .then(console.log("connected to server")) .catch((err) => console.log(err));agregue tiempo como 6000000 después de las opciones
En Mongoose versión 6 y superior no requieren esos
{ useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false } así que simplemente bórralo. Y si aún ve que app crashed - waiting for file changes before starting... simplemente guárdela una vez más y funcionará.
En la última versión de mangosta.
no necesitamos este objeto.
{ useNewUrlParser: verdadero, useUnifiedTopology: verdadero, useCreateIndex: verdadero, useFindAndModify: falso }
Pero si está tratando con versiones anteriores de mongoose, definitivamente lo necesita. También en su dirección de red mongodb agregue esta dirección 0.0.0.0/0 en lugar de su dirección IP.
en esta línea de código, ATLAS_URI=mongodb+srv://userone:useronepassword1234@cluster0.swye5.mongodb.net/?retryWrites=true&w=majority
asegúrese de escribir el nombre real de la base de datos sin los símbolos < >. Primero debe crear su base de datos en Mongo Atlas. 
Para resolver esto, creé una función en index.js, donde me conecto de forma asincrónica a mi base de datos y luego inicio el servidor, porque mongoose no espera la conexión de db, ejecuta todo en el lugar, forma que ese era el problema.
async function start() { try { //Database Connect await mongoose.connect( process.env.DB_CONNECTION, { useNewUrlParser: true, useUnifiedTopology: true, }, () => { console.log("Database Connected"); } ); app.listen(3000, () => { console.log("Server is running on port 3000 ..."); }); } catch (error) { console.error(error); } }